﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Business
{
    /// <summary>
    /// Contient des méthodes static utile pour tous les clients.
    /// </summary>
    public class Outils
    {

        /// <summary>
        /// Taille maximum des mots avant troncature.
        /// </summary>
        private static int TAILLEMAX = 30;


        /// <summary>
        /// Vérifie la validité d'une adresse e-mail.
        /// </summary>
        /// <param name="email">L'email à vérifier</param>
        /// <returns>true si l'e-mail est valide, false sinon</returns>
        public static bool verifierEmail(string email)
        {
            string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                  @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                  @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
            Regex re = new Regex(strRegex);
            if (re.IsMatch(email))
                return (true);
            else
                return (false);
        }


        /// <summary>
        /// Calcule l'age à partir de la date de naissance.
        /// </summary>
        /// <param name="birthdate">La date de naissance</param>
        /// <returns>L'age, en année</returns>
        public static int calculerAge(DateTime datenaissance)
        {
            int years = DateTime.Now.Year - datenaissance.Year;
            if (DateTime.Now.Month < datenaissance.Month
            || (DateTime.Now.Month == datenaissance.Month
                && DateTime.Now.Day < datenaissance.Day))
                years--;
            return years;
        }


        /// <summary>
        /// Met la première lettre en majuscule et le reste en minuscule.
        /// </summary>
        /// <param name="source">La chaine à formater</param>
        /// <returns>La chaine formatée</returns>
        public static string premiereLettreMajuscule(string source)
        {
            string premiere = source[0].ToString().ToUpper();
            string suite = source.Substring(1).ToLower();
            return premiere + suite;
        }


        /// <summary>
        /// Supprime les espaces en début et fin de chaine, et au milieu.
        /// </summary>
        /// <param name="chaine"></param>
        /// <returns></returns>
        public static string supprimerEspaces(string chaine)
        {
            return chaine.Trim().Replace(" ", "");
        }


        /// <summary>
        /// Formate un message (statut, commentaire) pour l'afficher correctement.
        /// </summary>
        /// <param name="message">Le message</param>
        /// <returns></returns>
        public static string formaterMessage(string message)
        {
            // Le message final, sans espaces
            List<string> listeMots = new List<string>();

            // On boucle sur tous les mots de la chaine
            string[] mots = message.Split(' ');
            foreach (string mot in mots)
            {
                if (mot.Length > TAILLEMAX)
                {
                    // Si le mot est trop long, on tronque
                    string temp = mot;
                    while (temp.Length > TAILLEMAX)
                    {
                        listeMots.Add(temp.Substring(0, TAILLEMAX));
                        temp = temp.Substring(TAILLEMAX);
                    }
                    if (temp.Length > 1)
                        listeMots.Add(temp);
                }
                else
                    listeMots.Add(mot);
            }

            // On reconstitue la chaine
            string messageFinal = "";
            foreach (string mot in listeMots)
                messageFinal += mot + ' ';

            // On supprime le dernier espace
            messageFinal = messageFinal.Substring(0, messageFinal.Length - 1);

            // On supprime les balises
            messageFinal = messageFinal.Replace("<", "&lt;").Replace(">", "&gt;");

            // On retourne
            return messageFinal;
        }

    }
}
